package hashcode;

/**
 * == :对于基本类型比较的是值，对于引用类型比较的是地址
 * equals: 默认情况下就是==，如果重写了比较的是值
 * hashcode，默认情况下返回内存编码，不同对象肯定不同
 * String: new对象判断==，结果为false；直接赋值，会复用字符串常量池的对象，判断==，结果为true；重写了equals和hashCode，所以结果为true
 * Integer: new对象判断==，结果为false;直接赋值判断==，在-128————127为true，超过则为false
 */
public class EqualsAndHashCodeAndDengyu {
    public static void main(String[] args) {
//        testString();
        testInteger();
    }
    public static void testString() {
        String s1 = "hello";
        String s2 = "hello";
        String s3 = new String("hello");
        String s4 = new String("hello");
        System.out.println(s1 == s2);//true
        System.out.println(s2 == s3);//false
        System.out.println(s3.equals(s4)); // true
        System.out.println(s3.hashCode() == s4.hashCode());// true
    }

    public static void testInteger() {
        Integer integer1 = 1;//自动装箱Integer.valueOf(1)
        Integer integer2 = 1;
        System.out.println(integer1 == integer2); //ture
        Integer integer3 =new Integer(1);
        Integer integer4 =new Integer(1);
        System.out.println(integer3 == integer4); //false
        Integer integer5 = 128;//自动装箱Integer.valueOf(1)
        Integer integer6 = 128;
        System.out.println(integer5 == integer6); // false

    }
}
